package org.zjt.agent;

import org.zjt.agent.convertor.RedefineClassConverter;
import org.zjt.agent.generate.ByteCodeGenerateAdapter;


import java.lang.instrument.ClassFileTransformer;
import java.lang.instrument.Instrumentation;
import java.util.Arrays;
import java.util.logging.Logger;

/**
 * 我的Java代理
 *
 * @author   单红宇(365384722)
 * @myblog  http://blog.csdn.net/catoop/
 * @create    2016年3月30日
 */
public class MyAgent {
    
    private static final Logger  LOGGER = Logger.getLogger(MyAgent.class.getName());

    /**
     * 启动时候利用javaaget命令接在的
     *
     * 该方法在main方法之前运行，与main方法运行在同一个JVM中
     * 并被同一个System ClassLoader装载
     * 被统一的安全策略(security policy)和上下文(context)管理
     *
     * @param agentOps
     * @param inst
     * @author SHANHY
     * @create 2016年3月30日
     */
    public static void premain(String agentOps, Instrumentation inst) {
        LOGGER.info("=========premain方法执行========");
        ClassFileTransformer classFileTransformer = ClassFileTransformerLoader.load();
        inst.addTransformer(classFileTransformer, Boolean.TRUE);
    }


    /**
     * 运行时候利用attach加载的
     * @param agentOps
     * @param inst
     */
    public static void agentmain(String agentOps, Instrumentation inst){
        LOGGER.info("=========agentmain方法执行========");

        ClassFileTransformer classFileTransformer = ClassFileTransformerLoader.load();
        inst.addTransformer(classFileTransformer, Boolean.TRUE);
    }

}